/*
 * File:   CMapa.cpp
 * Author: jimena2
 *
 * Created on 28 de mayo de 2011, 01:18 PM
 */

#include "CMapa.h"

CMapa* CMapa::instancia= NULL;

CMapa::CMapa() {
    this->adyacentes = new Collection();
    this->dady = new dataAdyacentes();
    this->nomMapa = new char[1];
    this->nomMapa[0]= '\0';
    this->territorios= new Collection();
    //this->mapas = new Dictionary();
}

CMapa* CMapa::getInstancia(){
    if(instancia == NULL)
        instancia= new CMapa();
    return instancia;
}


/*CMapa::CMapa(const CMapa& cm) {
    this->adyacentes= cm->getAdyacentes();
    this->dady=  cm->getDady();
 * int largo= strlen(cm->getNomMapa());
    this->nomMapa= new char[largo+1];
    strcpy(this->nomMapa,cm->getNomMapa());
    this->territorios= cm->getTerritorios();
}*/

IDictionary* CMapa::getMapas() const{
    return this->mapas;
}

 char* CMapa::getNomMapa() const{
     return this->nomMapa;
 }

ICollection* CMapa::getTerritorios() const{
    return this->territorios;
}
ICollection* CMapa::getAdyacentes() const{
    return this->adyacentes;
}
dataAdyacentes* CMapa::getDady() const{
    return this->dady;
}


void CMapa::ingresarNombreMapa(char* nomM){
    cout<<"en ingresar nombre Mapa\n";
    int largo= strlen(nomM);
    this->nomMapa= new char[largo+1];
    strcpy(this->nomMapa,nomM);
}

void CMapa::agregarTerritoriosMapa(char* nomT){
   cout<<"en agregar territorios mapa\n";
    String* nom;
    nom= new String(nomT);
    this->territorios->add(nom);//así está bien???
}
void CMapa::agregarAdyacentes(char* nom1, char* nom2){
    cout<<"en agregar adyacentes\n";
    this->dady= new dataAdyacentes(nom1, nom2);
    this->adyacentes->add(dady);
}

void CMapa::darAltaMapa(){
    cout<<"en Dar Alta Mapa\n";
    Mapa* m;
    claveString* key;
    //crear cambia y me devuelve un mapa, antes no devolvia nada...
    m= m->crear(this->nomMapa,this->territorios,this->adyacentes);
    //lo tengo que agregar a la coleccion de mapas
    key= new claveString(m->getNombre());
    mapas->add(key,m);
}

bool CMapa::fueUtilizado(char* nom){
    CPartida* cp = cp->getInstancia();
    return true;//provisorio!!!
    //return cp->fueUtilizado(nom);
}

void CMapa::eliminarMapa(){
    Mapa* m;
    claveString* key;
    key= new claveString(this->nomMapa);
    mapas->find(key);
    m->eliminarTerritorios();
    mapas->remove(key);
    delete m;
}


IDictionary* CMapa::listarTerritorios(){

    /*IIterator* iterator;
    iterator= territorios->getIterator();
    while(iterator->hasCurrent()){
        cout<< (char*)iterator->getCurrent();
        iterator->next();
    }
    delete iterator;
*/}
Mapa* CMapa::buscarMapa(char* nomMapa){
  /*  Mapa* m;
    String* key;
    key= new String(this->nomMapa);
    m= mapas->find(key);
    return m;*/
}
IDictionary* CMapa::buscarTerritoriosDom(char* nomM, char* tDominar){

}

IDictionary* CMapa::listarMapas(){
    Mapa* mapa;
    IIterator* iterator;
    iterator= mapas->getIterator();
    while(iterator->hasCurrent()){
        mapa= (Mapa*)iterator->getCurrent();
        //obtengo el nombre y lo imprimo!!
        cout<< mapa->getNombre();
        iterator->next();
    }
    delete iterator;
}

dataMapa* CMapa::seleccionarMapa(char* nom){
    dataMapa*  dm;
    Mapa* m;
    claveString* key;
    key= new claveString(this->nomMapa);
    mapas->find(key);
    dm= m->getDataMapa();
}

CMapa::~CMapa() {
}
